package com.eastfair.venueservice.vo;

import com.eastfair.annotation.annotation.vo.VoInfo;
import com.eastfair.annotation.model.BaseVoGroupClass;
import com.eastfair.venueservice.enumeration.BondManageOrderStatusEnum;
import com.eastfair.vo.BaseVO;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * 实体类
 * 保证金管理
 * </p>
 *
 * @author dqq
 * @since 2023-04-18
 */
@Data
@ApiModel(value = "BondManageVO", description = "保证金管理")
public class BondManageVO extends BaseVO implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "主键")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @VoInfo(groups = {BaseVoGroupClass.all.class})
    private Long id;

    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Integer isEnabled;
    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Integer isDeleted;
    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long projectId;
    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long subsystemId;
    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long tenantId;
    /**
     * 订单编号
     */
    @ApiModelProperty(value = "订单编号")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 64, message = "订单编号长度不能超过64")
    private String orderNumber;
    /**
     * 展会id
     */
    @ApiModelProperty(value = "展会id")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long exhibitionManageId;
    /**
     * 展会名称
     */
    @ApiModelProperty(value = "展会名称")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "展会名称长度不能超过255")
    private String exhibitionManageName;
    /**
     * 服务商id
     */
    @ApiModelProperty(value = "服务商id")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long serviceProviderId;
    /**
     * 服务商名称
     */
    @ApiModelProperty(value = "服务商名称")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "服务商名称长度不能超过255")
    private String serviceProviderName;
    /**
     * 主体类型(主场，配套服务商，搭建商 etc)
     */
    @ApiModelProperty(value = "主体类型(主场，配套服务商，搭建商 etc)")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 64, message = "主体类型(主场，配套服务商，搭建商 etc)长度不能超过64")
    private String serviceProviderType;
    /**
     * 服务商code
     */
    @ApiModelProperty(value = "服务商code")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String serviceProviderCode;
    /**
     * 联系人
     */
    @ApiModelProperty(value = "联系人")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String contact;
    /**
     * 联系方式
     */
    @ApiModelProperty(value = "联系方式")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String phone;
    /**
     * 保证金金额
     */
    @ApiModelProperty(value = "保证金金额")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal bondAmount;
    /**
     * 已付款金额
     */
    @ApiModelProperty(value = "已付款金额")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal payAmount;
    /**
     * 0:未缴纳 1:缴纳 2:部分缴纳
     */
    @ApiModelProperty(value = "0:未缴纳 1:缴纳 2:部分缴纳")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 50, message = "0:未缴纳 1:缴纳 2:部分缴纳长度不能超过50")
    private String payStatus;
    /**
     * 可退款金额
     */
    @ApiModelProperty(value = "可退款金额")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal refundableAmount;
    /**
     * 实际退款金额
     */
    @ApiModelProperty(value = "实际退款金额")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal actualRefundAmount;
    /**
     * 退款状态
     */
    @ApiModelProperty(value = "退款状态")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String refundStatus;
    /**
     * 退款时间
     */
    @ApiModelProperty(value = "退款时间")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private LocalDateTime refundTime;
    /**
     * 退款方式
     */
    @ApiModelProperty(value = "退款方式")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String refundWay;
    /**
     * 扣除金额
     */
    @ApiModelProperty(value = "扣除金额")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal deductAmount;
    /**
     * 展商ID
     */
    @ApiModelProperty(value = "展商ID")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long exhibitorId;
    /**
     * 展厅编号
     */
    @ApiModelProperty(value = "展厅编号")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "展厅编号长度不能超过255")
    private String spaceCode;
    /**
     * 展厅
     */
    @ApiModelProperty(value = "展厅")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "展厅长度不能超过255")
    private String spaceName;
    /**
     * 展位
     */
    @ApiModelProperty(value = "展位")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "展位长度不能超过255")
    private String siteName;
    /**
     * 展位编号
     */
    @ApiModelProperty(value = "展位编号")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "展位编号长度不能超过255")
    private String siteCode;
    /**
     * 展位面积
     */
    @ApiModelProperty(value = "展位面积")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal siteArea;
    /**
     * 订单时间
     */
    @ApiModelProperty(value = "订单时间")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private LocalDateTime orderTime;
    /**
     * 保证金订单状态 #{NOT_SUBMIT:未提交;SUBMIT:已提交;DISPATCH:已派单;RECEIVE:已接单;COMPLETE:已完成;CANCEL:已取消}
     */
    @ApiModelProperty(value = "保证金订单状态 #{NOT_SUBMIT:未提交;SUBMIT:已提交;DISPATCH:已派单;RECEIVE:已接单;COMPLETE:已完成;CANCEL:已取消}")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BondManageOrderStatusEnum orderStatus;
    /**
     * 设置保证金的系统标识，指的主场或场馆
     */
    @ApiModelProperty(value = "设置保证金的系统标识，指的主场或场馆")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 255, message = "设置保证金的系统标识，指的主场或场馆长度不能超过255")
    private String systemScene;
    /**
     * 保证金订单所属系统
     */
    @ApiModelProperty(value = "保证金订单所属系统")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Size(max = 64, message = "保证金订单所属系统长度不能超过64")
    private String belongSystem;
}
